﻿/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:  SYS模块总头文件
  Function List:
            
*******************************************************************************/
#ifndef SYS_IF_H 
#define SYS_IF_H  

#ifdef __cplusplus
extern "C" {
#endif

/*=============================================================================
                                 Includes                                  
==============================================================================*/
#include <sysDebug.h>
#include <sysWtd.h>
#include <sysIrcut.h>
#include <sysComm.h>
#include <sysNetCfg.h>
#include <sysIni.h>

/*=============================================================================
                               Macro Definition
==============================================================================*/

                        
/*=============================================================================
                        Local Structures and Typedef 
==============================================================================*/
/* cpu类型 */
typedef enum
{
    SYS_CPU_HI3518A,
    SYS_CPU_HI3518C,
    SYS_CPU_HI3518E,
    SYS_CPU_HI3516A,
    SYS_CPU_HI3516C,
    SYS_CPU_DM8127,
    SYS_CPU_HI3516D,
    SYS_CPU_M388C,
    SYS_CPU_GM8136,
    SYS_CPU_GK7107,
    SYS_CPU_HI3518EV200,
    SYS_CPU_HI3519,
    SYS_CPU_HI3516CV200,
    SYS_CPU_HI3519V101,
    SYS_CPU_HI3516CV300,
    SYS_CPU_Q3420P,
    SYS_CPU_MSC316DE,
    SYS_CPU_MSC313E,
    SYS_CPU_HI3531A,
    SYS_CPU_HI3521A,
    SYS_CPU_HI3520DV300,
    SYS_CPU_HI3535,
    SYS_CPU_HI3536DV100,
    SYS_CPU_HI3516EV100,
    SYS_CPU_HI3536,
    SYS_CPU_HI3536CV100,
	SYS_CPU_MSC316DM,
    SYS_CPU_NT98513,
	SYS_CPU_MSC316DC,
	SYS_CPU_NT96685,
	SYS_CPU_HI3559AV100,
	SYS_CPU_NT96683,
} SYS_cpuType_t;

/* 设备信息结构体 */
typedef struct
{
    int cpuType;                    /* cpu类型,定义见SYS_cpuType_t */
    char processor[32];             /* 处理器型号字符串 */
    int processorCount;             /* 处理器数量 */
    char serialNumber[32];          /* 设备序列号 */
    int bandWidth;                  /* 内存带宽 */
    /* 设备型号，格式为type_serials，比如设备类型为IPC_F725。*/
    char deviceType[32];
    char hardwareVersion[8];
    /* 应用程序是否自动启动，用来判断设备是否是调试状态版本 */
    char appAutoStart; 	
    /* 设备类型，比如设备类型为IPC。*/
    char deviceClass[32];
    /* 主从设备模式, 0 从设备, 1 主设备 */
    char isMaster;
} SYS_devInfo_t;


/* 设备运行状态 */
typedef struct
{
	int CPUUsagePercent;	/* CPU利用率百分比 */
	int contextSwitches;	/* 上下文切换次数 */
	float CPUTemperature;	/* CPU温度 */
} SYS_performanceInfo_t;


/* 内存信息，32位系统下128字节 */
typedef struct
{
	int total;	    /* 总共内存大小，以Kilo-Bytes为单位。*/
	int free;		/* 剩余内存大小，以Kilo-Bytes为单位。*/
} SYS_memoryInfo_t;

/* 串口监听接受数据信息 */
typedef struct 
{
    char ssid[36];
    char keys[128];
    char ipAddr[16];
    char subnetMask[16];
    char gateWay[16];
    int encryption; // 0: off  1:on 2:WEP-OPEN 3: WEP-SHARED  
                    // 4:WPA-PSK-TKIP, 5: WPA-PSK-CCMP(WPA-PSK-AES)
                    // 6:WPA2-PSK-TKIP, 7:WPA2-PSK-AES
                    // 8:WPA-TKIP       9:WPA-CCMP(WPA-AES)
                    // 10:WPA2-TKIP     11:WPA2-AES
    int cfgMask;   /* 配置掩码，当前只判断ip信息是否有效，第一位为1时，IP信息有效 */
    int Reserved[9];
}SYS_smartLink_t;

/*=============================================================================
                             extern  Variables                                  
==============================================================================*/


/*=============================================================================
                             Function Definition                                  
==============================================================================*/ 
/*******************************************************************************
  Function:     SYS_GetLdrValue
  Description:  获取光敏电阻的亮度值
  Input:        无
  Output:       -pValue: -1表示光敏电阻不存在
                         0~10000区间光线越亮值越大，io模式只返回0或10000
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetLdrValue(int *pValue); 

/*******************************************************************************
  Function:     SYS_SetLdrValue
  Description:  配置光敏电阻的亮度值
  Input:        - pLdrPrm: 光敏电阻的亮度值
  Output:       无
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/ 
int SYS_SetLdrValue(SYS_ldrPrm_t *pLdrPrm);

/*******************************************************************************
  Function:     SYS_GetKeyValue
  Description:  获取按键的状态值
  Input:        - keyId: 按键编号，定义见SYS_keyId_t
  Output:       - pValue: 按键值   gpio按键 0: 未按下 1: 按下
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetKeyValue(unsigned int keyId, unsigned int *pValue);

  
/*******************************************************************************
  Function:     SYS_GetDevInfo
  Description:  获取设备信息
  Input:        无
  Output:       - pDevInfo: 设备信息
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetDevInfo(SYS_devInfo_t *pDevInfo);

/*******************************************************************************
  Function:     SYS_Reboot
  Description:  重启设备
  Input:        无
  Output:       无
  Return:       0: 操作成功
                <0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_Reboot(void);

/*******************************************************************************
  Function:     SYS_GetJiffies
  Description:  获取系统jiffies值
  Input:        无
  Output:       无
  Return:       jiffies值
  Others:       无
*******************************************************************************/
int SYS_GetJiffies(void);

/*******************************************************************************
  Function:     SYS_StartCrypto
  Description:  启动加密检验
  Input:        无
  Output:       无
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/ 
void SYS_CryptoInit(void);

/*******************************************************************************
  Function:     SYS_SetPulse
  Description:  脉冲产生函数
  Input:        - gpio:gpio号
                - time:脉冲周期(us)
                - pulseNum:脉冲数
  Output:       无
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_SetPulse(int gpio, int time, int pulseNum);

/*******************************************************************************
  Function:     SYS_GetProcessPid
  Description:  获取进程pid
  Input:        - pName: 进程名
  Output:       无
  Return:       >0: 进程pid
                <0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetProcessPid(char *pName);

/*******************************************************************************
  Function:     SYS_LockProcessMem
  Description:  将进程的镜像数据加载到内存并锁定
  Input:        无
  Output:       无
  Return:       无
  Others:       无
*******************************************************************************/
void SYS_LockProcessMem(void);

/*******************************************************************************
  Function:     SYS_SystemCall
  Description:  执行命令行
  Input:        - pCommand: 命令行
  Output:       无
  Return:       0: 成功
                ~0: 失败
  Others:       无
*******************************************************************************/
int	SYS_SystemCall(const char *pCmd);


/*******************************************************************************
  Function:     SYS_UpgradeKillLock
  Description:  kill升级无关的进程, 锁定升级相关进程的内存，
                防止升级过程中访问导致升级失败
  Input:        - pAppName: 应用程序名
  Output:       无
  Return:       无
  Others:       无
*******************************************************************************/
void SYS_UpgradeKillLock(char *pAppName);


/*******************************************************************************
  Function:     SYS_crc32
  Description:  计算crc32检验和
  Input:        - crc: 初始值
                - pBuf: 数据缓存
                - len: 数据长度
  Output:       无
  Return:       crc32检验和
  Others:       无
*******************************************************************************/ 
unsigned int SYS_crc32(unsigned int crc, const void *pBuf, int len);

/*******************************************************************************
  Function:     SYS_Strupr
  Description:  字符串转成大写
  Input:        - str: 字符串
  Output:       - str: 字符串
  Return:       字符串
  Others:       无
*******************************************************************************/ 
char *SYS_Strupr(char *str);

/*******************************************************************************
  Function:     SYS_SetPulse
  Description:  脉冲产生函数
  Input:        - gpio:gpio号
                - time:脉冲周期(us)
                - pulseNum:脉冲数
  Output:       无
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_SetPulse(int gpio, int time, int pulseNum);

/*******************************************************************************
  Function:     SYS_GetPerInfo
  Description:  获取cpu使用率
  Input:        无
  Output:       -pInfo: cpu使用率
  Return:       0: 操作成功
                <0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetPerInfo(SYS_performanceInfo_t *pInfo);


/*******************************************************************************
  Function:     SYS_GetMemInfo
  Description:  得到内存使用信息
  Input:        无
  Output:       -pInfo，内存信息
  Return:       0: 操作成功
                <0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetMemInfo(SYS_memoryInfo_t *pInfo);


/*******************************************************************************
  Function:     SYS_GetSerialNumber
  Description:  获取设备序列号
  Input:        - len: 缓存长度
  Output:       - pSerial: 设备序列号
  Return:       0: 操作成功
                <0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_GetSerialNumber(char *pSerial, int len);


/*******************************************************************************
  Function:     SYS_ResetStatus
  Description:  获取复位按钮状态
  Input:        无
  Output:       无
  Return:       0: 没有触发恢复默认
                1: 触发恢复默认
  Others:       无
*******************************************************************************/
int SYS_ResetStatus(void);


/*******************************************************************************
  Function:     SYS_SenSorReset
  Description:  sensor复位
  Input:        无
  Output:       无
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_SenSorReset(void);


/*******************************************************************************
  Function:     SYS_UartListen
  Description:  监听串口
  Input:        无
  Output:       无
  Return:       0: 操作成功
                <0: 操作失败
  Others:       无
*******************************************************************************/
int SYS_UartListen(void);


/*******************************************************************************
  Function:     SYS_GetUartData
  Description:  获取串口接收的数据
  Input:        无
  Output:       无
  Return:       无
  Others:       无
*******************************************************************************/
void SYS_GetUartData(SYS_smartLink_t *pWifiCfg);


/*******************************************************************************
  Function:     SYS_UsrInit
  Description:  SYS模块用户态初始化
  Input:        无
  Output:       无
  Return:       0: 操作成功
                ~0: 操作失败
  Others:       无
*******************************************************************************/ 
int SYS_UsrInit(void);


/*******************************************************************************
  Function:     SYS_UsrExit
  Description:  SYS模块用户态注销
  Input:        无
  Input:        无
  Output:       无
  Return:       无
  Others:       无
*******************************************************************************/
void SYS_UsrExit(void);

#ifdef __cplusplus
}
#endif
#endif // SYS_IF_H 

